package com.mvp.shq.washer.http;


import com.mvp.shq.washer.entity.Banner;
import com.mvp.shq.washer.entity.BaseResult;
import com.mvp.shq.washer.entity.MessageBean;
import com.mvp.shq.washer.entity.RechargeMoney;
import com.mvp.shq.washer.entity.TokenBean;
import com.mvp.shq.washer.entity.User;
import com.mvp.shq.washer.entity.VersionBean;

import java.util.Date;
import java.util.List;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * Created by Administrator on 2016/3/23.
 */
public interface ApiService {

    /**
     * 登录接口
     *
     * @param mobile
     * @param pwd
     * @return
     */
    @POST("m/login/anon")
    Observable<BaseResult<TokenBean>> login(@Query("mobile") String mobile, @Query("pwd") String pwd, @Query("timestamp") String timestamp, @Query("sign") String sign);

    /**
     * 注册
     * @param mobile
     * @param pwd
     * @param code
     * @param timestamp
     * @param sign
     * @return
     */
    @POST("m/register/anon")
    Observable<BaseResult<TokenBean>> reg(@Query("mobile")String mobile,@Query("pwd")String pwd,@Query("code")String code,@Query("timestamp")String timestamp,@Query("sign")String sign);

    /**
     * 获取注册验证码
     * @param mobile
     * @return
     */
    @GET("m/register/code/anon")
    Observable<BaseResult<String>> code(@Query("mobile")String mobile);

    /**
     * 忘记密码
     * @param mobile
     * @param code
     * @param pwd
     * @param timestamp
     * @param sign
     * @return
     */
    @POST("m/forget/anon")
    Observable<BaseResult<String>> forgetPwd(@Query("mobile")String mobile,@Query("code")String code,@Query("pwd")String pwd,@Query("timestamp")String timestamp,@Query("sign")String sign);

    /**
     * 获取忘记密码验证码
     * @param mobile
     * @return
     */
    @GET("m/forget/code/anon")
    Observable<BaseResult<String>> forgetCode(@Query("mobile")String mobile);

    /**
     * 获取用户信息
     * @param token
     * @param userId
     * @return
     */
    @GET("m/info/{userId}")
    Observable<BaseResult<User>> getUserInfo(@Header("Authorization") String token,@Path("userId") String userId);

    /**
     * 获取banner
     * @return
     */
    @GET("m/banners/anon")
    Observable<BaseResult<List<Banner>>> banner();

    /**
     * 获取充值金额
     * @return
     */
    @GET("m/recharge/money/anon")
    Observable<BaseResult<List<RechargeMoney>>> rechargeMoney();

    /**
     * 获取版本号
     * @param platform
     * @return
     */
    @GET("m/versions/latest/anon")
    Observable<BaseResult<VersionBean>> version(@Query("platform")String platform);

    /**
     * 修改密码
     * @param token
     * @param userId
     * @param oldPwd
     * @param newPwd
     * @return
     */
    @PUT("m/info/{userId}/pwd")
    Observable<BaseResult<String>> resetPwd(@Header("Authorization") String token,@Path("userId") String userId,@Query("oldPwd")String oldPwd,@Query("newPwd")String newPwd);

    /**
     * 获取消息列表
     * @param token
     * @param userId
     * @return
     */
    @GET("m/messages")
    Observable<BaseResult<List<MessageBean>>> getMessages(@Header("Authorization") String token,@Query("userId")String userId);

    /**
     * 修改用户生日
     * @param token
     * @param userId
     * @param birthday
     * @return
     */
    @PUT("m/info/{userId}/birthday")
    Observable<BaseResult<String>> updateBirthday(@Header("Authorization") String token, @Path("userId") String userId, @Query("birthDay")String birthday);

    /**
     * 修改用户性别
     * @param token
     * @param userId
     * @param gender
     * @return
     */
    @PUT("m/info/{userId}/gender")
    Observable<BaseResult<String>> updateGender(@Header("Authorization") String token, @Path("userId") String userId, @Query("gender")String gender);

    /**
     * 修改用户昵称
     * @param token
     * @param userId
     * @param nickname
     * @return
     */
    @PUT("m/info/{userId}/nickname")
    Observable<BaseResult<String>> updateNickname(@Header("Authorization") String token, @Path("userId") String userId, @Query("nickname")String nickname);

    /**
     * 上传用户头像
     * @param token
     * @param userId
     * @param head
     * @return
     */
    @Multipart
    @POST("m/info/{userId}/face")
    Observable<BaseResult<String>> updateFace(@Header("Authorization") String token, @Path("userId") String userId,@Part("face\"; filename=\"image.png") RequestBody head);

    /**
     *修改手机号码发送验证码
     * @param token
     * @param mobile
     * @return
     */
    @GET("m/mod/code")
    Observable<BaseResult<String>> modifyMobileCode(@Header("Authorization") String token,@Query("mobile")String mobile);

    /**
     * 修改手机
     * @param token
     * @param userId
     * @param oldPwd
     * @param newMobile
     * @param code
     * @return
     */
    @PUT("m/info/{userId}/mobile")
    Observable<BaseResult<String>> modifyMobile(@Header("Authorization") String token,@Path("userId")String userId,@Query("oldPwd")String oldPwd,@Query("newMobile")String newMobile,@Query("code")String code);
}
